// 字符串类string的应用
using System;
namespace StringApp 
{
    class StringAppC
    { 
        static void Main(string[] args){
            /*字符串 string 的使用*/
            //字符串的声明
            string strval1 = "相信自己";
            string strval2 = "永不放弃";
            Console.WriteLine(strval1);
            //字符串的链接
            Console.WriteLine(strval1 + strval2);
            Console.WriteLine(String.Format("{0},{1}", strval1, strval2));
            //字符串的比较
            Console.WriteLine(strval1 == strval2); // 相等：False；不相等：True
            Console.WriteLine(String.Compare(strval1, strval2)); // 相等：0；不相等:第一个参数长度大于第二个参数：1，否则值为-1；
            Console.WriteLine(strval1.CompareTo(strval2));// 相等：0；不相等:第一个参数长度大于第二个参数：1，否则值为-1；
            Console.WriteLine(Equals(strval1, strval2));// 相等：False；不相等：True
            //字符串的格式化
            DateTime dt = DateTime.Now;
            string date = String.Format("{0:y}", dt); // 默认值：简端的日期(YYYY/MM/dd)&时间格式(hh:mm:ss)；D完整的日期(YYYY年MM月dd日)；d简端的日期格式(YYYY/MM/dd),f,F,t,T,g,G,m/M,Y/y
            Console.WriteLine("字符串的格式化:{0}", date);
            //字符串的截取
            string newStrSub = strval1.Substring(2, 1); // 第2个开始截取一个字符
            Console.WriteLine(newStrSub);
            string strPath = @"C:\Users\barry\Documents\Visual Studio 2019\Project\Study\1.cs";
            /*字符串的截取 - 需要声明System.IO.Path实现*/
            // 获取文件的目录路径
            string directoryPath = Path.GetDirectoryName(strPath);
            Console.WriteLine("Directory Path: " + directoryPath);

            // 获取文件的名称（不包括扩展名）
            string fileName = Path.GetFileNameWithoutExtension(strPath);
            Console.WriteLine("File Name: " + fileName);

            // 获取文件的扩展名
            string extension = Path.GetExtension(strPath);
            Console.WriteLine("Extension: " + extension);
            /*字符串的截取 - Substring 实现*/
            // 使用Substring提取文件路径
            int lastDirectorySeparatorIndex = strPath.LastIndexOf(@"\"); // 获取到最后一位出现的字符下标
            string SubdirectoryPath = strPath.Substring(0, lastDirectorySeparatorIndex);
            Console.WriteLine("Directory Path: " + SubdirectoryPath);

            // 使用Substring提取文件名（不包括扩展名）
            int lastDotIndex = strPath.LastIndexOf('.');
            string subfileName;
            if (lastDotIndex > lastDirectorySeparatorIndex)
            {
                subfileName = strPath.Substring(lastDirectorySeparatorIndex + 1, lastDotIndex - lastDirectorySeparatorIndex - 1);
            }
            else
            {
                subfileName = strPath.Substring(lastDirectorySeparatorIndex + 1);
            }
            Console.WriteLine("File Name: " + subfileName);

            // 使用Substring提取扩展名
            string subextension;
            if (lastDotIndex != -1)
            {
                subextension = strPath.Substring(lastDotIndex);
            }
            else
            {
                subextension = string.Empty; // 如果没有扩展名，则扩展名为空字符串
            }
            Console.WriteLine("Extension: " + subextension);


            //字符串的分割
            string splitStr = "banner,apple|pear";
            // 1、使用单个字符作为分隔符
            char[] separators1 = new char[] { ','};
            string[] fruits1 = splitStr.Split(separators1);
            Console.WriteLine($"[{ string.Join(", ", fruits1)}]  {fruits1[0]}");
            // 2、使用多个字符作为分隔符
            char[] separators2 = new char[] { ',','|'};
            string[] fruits2 = splitStr.Split(separators2);
            Console.WriteLine($"[{ string.Join(", ", fruits2)}]  {fruits2[0]}");
            // 3、使用字符串数组作为分隔符
            string[] atringSeparators= new string[] {",","|"};
            string[] fruits3 = splitStr.Split(atringSeparators, StringSplitOptions.RemoveEmptyEntries);
            Console.WriteLine($"[{ string.Join(", ", fruits3)}]  {fruits3[0]}");
            // 4、 使用正则表达式作为分隔符
            string[] fruits4 = Regex.Split(splitStr, @"[,;| ]+");
            Console.WriteLine($"需要声明using System.Text.RegularExpressions;[{ string.Join(", ", fruits4)}]  {fruits4[0]}");

            //字符串的插入
            string strInsert1 = "相信自己";
            string strInsert2 = strInsert1.Insert(4, ",永不放弃");// 参数1：第几位，参数2：要加入的内容
            Console.WriteLine(strInsert2);
            //填充字符串
            string strPad = "相信自己";
            string strPadLeft = strPad.PadLeft(6, '('); // PadLeft表示左边填充，参数1:表示填充后的字符长度，参数二表示要填充的字符
            string strPadRight = strPad.PadRight(6, ')'); // 参数1:表示填充后的字符长度，参数二表示要填充的字符
            Console.WriteLine("PadLeft {0} {1}", strPadLeft, strPadRight);
            //删除字符串
            string strRemoveVal = "相信自己";
            string strRemoveNewVal = strRemoveVal.Remove(0,1); // 参数1：第几个开始，参数2：要删除的数量
            Console.WriteLine(strRemoveNewVal);
            //复制字符串
            string strCopyVal = "这是给你复制的文案";
            string strCopyVal1 = strCopyVal; // 直接赋值
            Console.WriteLine(strCopyVal1);

            string strCopyNewVal = String.Copy(strCopyVal);//Copy
            Console.WriteLine(strCopyNewVal);

            char[] strCopyToArr = new char[strCopyVal.Length]; // CopyTo 这里最好和CopyTo的参数4值一致
            strCopyVal.CopyTo(0, strCopyToArr, 1, 4);// 参数1：需要复制的字符开始位置；参数2：目标字符数组；参数3：指定目标字符数组中开始存放位置；参数4：指定要复制的数量；
            string strCopyToArrNew = new string(strCopyToArr);
            Console.WriteLine(strCopyToArrNew);
            //替换字符串
            string strReplaceVal = "替换字符串,*?";
            string strReplaceValNew = strReplaceVal.Replace("*","a");
            Console.WriteLine(strReplaceValNew);
        }
    }
}